#include <iostream>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>

#define TAMNOMBRE 1024

using namespace std;

/* Variables: */
SDL_Surface *screen; /* La pantalla */
SDL_Surface *marco;

/* Esta va a ser nuestra "fuente" */
struct tipoFuente{
   SDL_Surface *imagen;
   int ancho, alto;
   int anchoLetra, altoLetra;
   int primeraLetra;
}fuente;

 /* ----- Funciones auxiliares para fuentes ----*/
 /* Leer una fuente desde fichero */
 void leerFuente() {
   fuente.imagen = IMG_Load("font/font_arial.gif"); 
	if(fuente.imagen == NULL)
		perror(SDL_GetError());

    marco = IMG_Load("imgs/marco.png");
	if(marco == NULL)
		perror(SDL_GetError());
   /* Los siguientes valores son prefijados para la fuente
   de ejemplo: 16x16 caracteres, cada uno de 16x16 pixels;
   habria que modificarlo si se usan fuentes de otro tamño */
   fuente.ancho=256;
   fuente.alto=256;
   fuente.anchoLetra=16;
   fuente.altoLetra=16;
   fuente.primeraLetra=0;
 }
 
 /* Escribir una letra */
 void escribirLetra(int x, int y, char letra) {
   SDL_Rect destino, origen; 
   int fila, columna;
   int letrasPorFila, letrasPorColumna;

   letrasPorFila = fuente.ancho/fuente.anchoLetra;
   letrasPorColumna = fuente.alto/fuente.altoLetra;
   fila = letra / letrasPorColumna;
   columna = letra % letrasPorColumna;
   origen.x = columna * fuente.anchoLetra;
   origen.y = fila * fuente.altoLetra;
   origen.w = 16;
   origen.h = 16;
   destino.x = x;
   destino.y = y;
   SDL_BlitSurface(fuente.imagen, &origen, screen, &destino); 
 }

 /* Escribir una frase */
 void escribirFrase(int x, int y, char frase[]) {
   int i;
   for (i=0; i<strlen(frase); i++)
     escribirLetra(x+i*fuente.anchoLetra, y, frase[i]);
 }

 int nuevaLinea(){
    return fuente.altoLetra;
 }

 /* ------ Fin de funciones para fuentes ------ */

 void mostrarMarco(int x, int y) {
   SDL_Rect destino; 
   destino.x = x;
   destino.y = y;
   SDL_BlitSurface(marco, NULL, screen, &destino); 
 }

 /* Cuerpo del programa */
 int main()
 {
   char frase[TAMNOMBRE];
   char puntos[10];
   char tituloJugador[] = "Jugador: ";
   char tituloPuntos[] = "Puntaje: ";

   cout << "Ingrese su nombre = " << endl;
   cin.getline(frase, TAMNOMBRE-1);

   strcpy(puntos,"10");

   /* Inicializar la biblioteca SDL */
   if (SDL_Init(SDL_INIT_VIDEO) < 0) {
     cout << "No se pudo inicializar SDL: " << SDL_GetError() << endl;
     exit(1);
   }

   screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE );
   if( screen == NULL ) {       
      cout << "Error al entrar a modo grafico: " << SDL_GetError() << endl;
      SDL_Quit();
      return -1;
   }

   /* Cambiamos el texto de la ventana */
   SDL_WM_SetCaption( "Hola texto!", "Hola texto!" );

   leerFuente();

   mostrarMarco(200-nuevaLinea()-nuevaLinea(), 200-nuevaLinea()-nuevaLinea());
   escribirFrase(200, 200, tituloJugador);
   escribirFrase(200+strlen(tituloJugador)*16, 200, frase);
   escribirFrase(200, 200+nuevaLinea()+nuevaLinea(), tituloPuntos);
   escribirFrase(200+strlen(tituloPuntos)*16, 200+nuevaLinea()+nuevaLinea(), puntos);

   /* Actualizamos la pantalla */
   SDL_Flip(screen); 

   /* Esperamos 5 segundos */
   SDL_Delay( 5000 );

   /* Finalmente, preparamos para salir */
   SDL_Quit();
   return 0;
 } 
